package com.ia2014.tp.portal2.rest;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;

import com.ia2014.tp.portal2.Json.ToJasonConverter;
import com.ia2014.tp.portal2.facades.FacadeIntegracion;
import com.ia2014.tp.portal2.integration.rest.entities.Ranking;
import com.ia2014.tp.portal2.log.PortalLogger;

/**
 * Rest que procesa el Ranking de BestSeller. Lo recibe desde el modulo Logistica
 * en un Json.
 * @author Liliana
 *
 */

@Path("/bestSeller")
@Stateless
public class PortalRest {
	
	private static Logger logger= PortalLogger.getLogger(PortalRest.class.toString());
	
	@EJB(lookup="java:app/PortalBussines/FacadeIntegracionBean")
	private FacadeIntegracion facade;
	
	@POST
	@Path("/procesar")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public String procesar(String json) throws Exception{
		
		//Mensaje de rta segun el contrato
		String estado="ERROR";
		String mensaje="No se procesar el Ranking de mas vendidos";
		
		logger.info("Obteniendo el Ranking de BestSellers");
		
		try {
			List<Ranking> nuevoRanking= new ArrayList<Ranking>();
			
			ToJasonConverter converterJson= new ToJasonConverter();
			
			RankingBestSellerList listaBestSeller= (RankingBestSellerList) converterJson.toObject(json, RankingBestSellerList.class);
			
			com.ia2014.tp.portal2.rest.Ranking registroRanking= null;
			
			Iterator<com.ia2014.tp.portal2.rest.Ranking> itRanking= listaBestSeller.getRankings().iterator();
			
			while (itRanking.hasNext()){
				registroRanking=itRanking.next();
				Ranking rankingEntity= new Ranking();
				rankingEntity.setCodigoArticulo(registroRanking.getCodigoArticulo());
				rankingEntity.setPosicion(registroRanking.getPosicion());
				nuevoRanking.add(rankingEntity);
			}
			facade.actualizarListaBestSellers(nuevoRanking);
			estado="OK";
			mensaje="Procesado Ranking de mas vendidos";
			
		} catch (Exception e) {
			e.printStackTrace();
			mensaje="Se produjo un error al procesar el Ranking BestSeller";
			estado="ERROR";
			logger.error(mensaje);
			throw new Exception("Error al procesar el Ranking BestSeller" + e);
		}
		return "{\"estado\" : \"" + estado + "\",\"mensaje\" : \""+ mensaje +"\"}";
	}
	
	
	@GET
	@Path("/procesar")
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public String procesar2(String json) throws Exception{
		
		//Mensaje de rta segun el contrato
		String estado="ERROR";
		String mensaje="No se procesar el Ranking de mas vendidos";
		
		logger.info("Obteniendo el Ranking de BestSellers");
		
		try {
			List<Ranking> nuevoRanking= new ArrayList<Ranking>();
			
			ToJasonConverter converterJson= new ToJasonConverter();
			
			RankingBestSellerList listaBestSeller= (RankingBestSellerList) converterJson.toObject(json, RankingBestSellerList.class);
			
			com.ia2014.tp.portal2.rest.Ranking registroRanking= null;
			
			Iterator<com.ia2014.tp.portal2.rest.Ranking> itRanking= listaBestSeller.getRankings().iterator();
			
			while (itRanking.hasNext()){
				registroRanking=itRanking.next();
				Ranking rankingEntity= new Ranking();
				rankingEntity.setCodigoArticulo(registroRanking.getCodigoArticulo());
				rankingEntity.setPosicion(registroRanking.getPosicion());
				nuevoRanking.add(rankingEntity);
			}
			facade.actualizarListaBestSellers(nuevoRanking);
			
		} catch (Exception e) {
			mensaje="Se produjo un error al procesar el Ranking BestSeller";
			estado="ERROR";
			logger.error(mensaje);
			throw new Exception("Error al procesar el Ranking BestSeller" + e);
		}
		return "{\"estado\" : \"" + estado + "\",\"mensaje\" : \""+ mensaje +"\"}";
	}
}
